在Debian安装完成后的设置备忘录
安装debian时的备注
首先
这份备忘录是为了在当前服务器无法应对某CPU供应商的漏洞而需要升级操作系统主版本的情况下,避免每次都花费时间进行查询而记录下工作内容而存在的。
前提
有一个作为参考的原始服务器。
安装选项采用基本最小配置。(只安装SSH可能更快。在EC2上,由于没有控制台模拟器,这是必需的)
假设从云端VPS上的ISO镜像进行安装。
办事清单
允许进行SSH登录
-
- 实现密码登录。
-
- 开放端口。
-
- 在内部使用端口22是可以的,但是向外使用另一个端口会更好。在这里我们使用40002。
-
- 此时,防火墙只开放40002。
-
- 可以配置openssh也监听40002,但使用下一步的NAPT配置会更方便,在增加实例时内部配置就比较轻松,所以服务器仍然监听22。
NAPT配置。
配置访问全局IP的40002端口的流量重定向到安装了openssh的主机(在这里我们称其为debsvr)的22端口。
如果未安装openssh,则安装。
实现公钥认证登录。
使用scp将公钥复制到服务器。请注意,如果在后面添加-P参数来指定端口也是不会通过的。
scp -P 40002 .ssh/id_ed25519.pub user@ipaddr:
另外,在客户端电脑上进行简单的ssh设置以便方便远程登录。
— .ssh/config.old
+++ .ssh/config
@@ -0,0 +1,4 @@
+ Host debsvr
+ HostName ipaddr
+ User user
+ Port 40002
更新sources.list
- 根据 sources.list generator 的指示,盲目地安装以下包:curl、wget、apt-transport-https、dirmngr。
请勿删除软件。
因为我是一个没有服务精神的废物,所以我会删除所有与报告相关的内容。
首先要确认包装。
dpkg --get-selections | grep port
找到并删除安装报告或报告相关的功能。根据发行版的不同,可能还有popularity-contest这样的功能。如果有apport相关的功能也要删除。(可能只适用于Ubuntu)
sudo apt-get purge installation-report
安装必要软件
取り决めは人によって違いますが、私の場合は
sudo apt-get install tmux vim zsh build-essential htop heirloom-mailx
一种选择是从回避包入手。
sudo apt-get install -t jessie-backports certbot openssl
在这则消息中,nginx 表明将从源代码入手。
如果有旧服务器的话,取其列表和差异会更快。
dpkg --get-selections>newhost.list; diff oldhost.list newhost.list | less
GitBucket is a Git-based code hosting and collaboration platform.
-
- JDK的安装
/etc/apt/sources.list.d/java.list
deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main
使用以下命令安装Oracle Java 8:
sudo apt-get install oracle-java8-installer
启动GitBucket
不需要安装。如果使用内置的httpd,则不需要httpd。
wget https://github.com/gitbucket/gitbucket/releases/download/4.22.0/gitbucket.war
java -jar gitbucket.war
此外,客户端只需要将新的服务器注册到Git的远程仓库即可。非常方便。
git remote remove origin
git remote add origin http://IPADDR:8080/path/to/repository.git
git push origin master
nginx:一种高性能的开源Web服务器软件。
由于软件包中的nginx版本较旧,导致无法使用http2,我会自己从源代码中安装。
-
- 将openssl升级至1.0.2版本。另外,因为我还想要安装一些补丁,所以也顺便安装git。
sudo apt-get install -t jessie-backports openssl
sudo apt-get install git
获取nginx源码。我个人建议选择stable版本,但mainline版本也可以。
wget https://nginx.org/download/nginx-X.XX.X.tar.gz
解压源码和补丁。可以通过搜索找到需要的补丁。如果能够使用默认的补丁(nginx文档中提供的),最好只使用默认补丁。
mkdir tmp; cd tmp
tar xzf ../nginx-X.XX.X.tar.gz
cd nginx-X.XX.X
git clone https://github.com/openresty/headers-more-nginx-module.git
git clone https://github.com/arut/nginx-dav-ext-module.git
准备编译环境。由于经常需要重新编译,比如进行安全更新,所以最好创建一个包含configure选项的脚本。
configure.sh
./configure \
–prefix=/usr/local/nginx-1.12.2 \
–with-cc-opt=’-g -O2 -fstack-protector –param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2′ \
–with-ld-opt=’-Wl,-Bsymbolic-functions -Wl,-z,relro’ \
–lock-path=/var/lock/nginx.lock \
–pid-path=/run/nginx.pid \
–with-http_ssl_module \
–with-http_realip_module \
–with-http_addition_module \
–with-http_gzip_static_module \
–with-http_v2_module \
–with-http_dav_module \
–add-module=./headers-more-nginx-module \
–add-module=./nginx-dav-ext-module
安装所需的软件包或库,补充缺少的软件包或库。
sudo apt-get install libpcre3-dev
sudo apt-get install -t jessie-backports libssl-dev
sudo apt-get install php5 php5-fpm
sudo apt-get install -t jessie-backports certbot
sudo apt-get install mariadb
mysql_secure_installation
sudo apt-get install -t jessie-backports postgresql
至于postgresql,我只是碰巧需要postgis 2.3以上的版本,所以我使用了backports来安装9.6版本,一般情况下stable的9.4版本也足够了。另外,一般来说只需要安装mariadb就可以了,用到postgresql的软件包很少。
开始编译。需要注意的是,make会花费相当长的时间。
make
可能会失败,需要安装缺少的软件包。
sudo apt-get install libexpat1-dev
可以选择重新执行make命令,如果有需要的话,也可以重新执行configure.sh脚本。不过要注意重新执行configure.sh脚本会导致Makefile的日期更新,编译也会全部重新执行,所以要小心。
安装。
sudo make install
创建一个没有版本号的目录结构。
cd /usr/local/
sudo ln -s nginx-X.XX.X nginx
cd /etc
sudo ln -s /usr/local/nginx/conf nginx
sudo -s
cd /var/log
sudo ln -s /usr/local/nginx/logs nginx
准备启动脚本。
git clone https://github.com/Fleshgrinder/nginx-sysvinit-script.git
cd nginx-sysvinit-script
sudo make
准备服务定义。
/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecStartPost=/bin/sleep 1
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
解锁服务。
sudo systemctl unmask nginx.service
sudo systemctl enable nginx.service
进行测试。
sudo /usr/local/nginx/sbin/nginx -V
sudo /usr/local/nginx/sbin/nginx -t
sudo systemctl list-unit-files –type=service
sudo systemctl status nginx.service
配置php等。
sudo apt-get install php5-mysqlnd php5-pgsql php5-curl
修改php.ini
— php.ini.old
+++ php.ini
@@ -390,7 +390,7 @@
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
-memory_limit = 128M
+memory_limit = 512M
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
@@ -657,7 +657,7 @@
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
-post_max_size = 8M
+post_max_size = 0
; Automatically add files before PHP document.
; http://php.net/auto-prepend-file
@@ -817,7 +817,7 @@
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
-upload_max_filesize = 2M
+upload_max_filesize = 0
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
修改/etc/php5/fpm/pool.d/www.conf
— www.conf.old
+++ www.conf
@@ -106,7 +106,7 @@
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to ‘static’, ‘dynamic’ or ‘ondemand’
; Note: This value is mandatory.
-pm.max_children = 5
+pm.max_children = 10
; The number of child processes created on startup.
; Note: Used only when pm is set to ‘dynamic’
@@ -366,7 +366,7 @@
; Setting to “no” will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
-;clear_env = no
+clear_env = no
; Limits the extensions of the main script FPM will allow to parse. This can
; prevent configuration mistakes on the web server side. You should only limit
启动。如果没有问题,使用下列任意命令进行启动。
# sudo /etc/init.d/nginx start
# sudo service nginx start
sudo systemctl start nginx.service
创建虚拟包(dummy package)。当安装owncloud等软件时,由于依赖关系,会尝试安装与软件包管理相关的httpd服务,所以需要让系统知道nginx已经安装。
首先安装equivs。
sudo apt-get install equivs
mkdir ~/tmp/nginx-dummy
cd ~/tmp/nginx-dummy
equivs-control nginx-dummy
编辑默认的nginx-dummy文件。
nginx-dummy
— nginx-dummy.old
+++ nginx-dummy
@@ -6,14 +6,14 @@
# Homepage:
Standards-Version: 3.9.2
-Package: +Package: nginx-dummy
# Version:
# Maintainer: Your Name <yourname@example.com>
# Pre-Depends:
# Depends:
# Recommends:
# Suggests:
-# Provides:
+Provides: httpd
# Replaces:
# Architecture: all
# Copyright:
@@ -22,7 +22,7 @@
# Extra-Files:
# Files: #
-Description:
– long description and info
+Description: dummy package for nginx
+ dummy package for nginx installed manually.
.
– second paragraph
+ nginx provides httpd
构建并安装虚拟包。
equivs-build nginx-dummy
sudo dpkg -i nginx-dummy_1.0_all.deb
用中文对nginx进行设置
通常情况下,可以从旧服务器上迁移数据。
如果在gitbucket上使用SNI进行分配,能够更轻松地实现http2的支持。
SSL的相关配置,使用Generate Mozilla Security Recommended Web Server Configuration Files就很方便。
server {
listen 80;
server_name DOMAINNAME;
return 301 https://DOMAINNAME$request_uri;
}
server {
listen 443 ssl http2;
#listen [::]:443 ssl http2;
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam;
# modern configuration. tweak to your needs.
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
#add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/chain.pem;
#resolver DNSIPADDR; # リバプロをホスト名で指定する場合DNSを指定
access_log logs/access.log;
error_log logs/error.log;
server_name DOMAINNAME;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
# set max upload size
client_max_body_size 512M; # 画像とかバイナリとか置く場合,ここをでかくしておかないとpushできないので注意
location / {
proxy_pass http://127.0.0.1:8080/; # 同じホストでデフォ設定でjavaでgitbucket.warを実行している場合
}
}
使用 certbot 获取证书
由于我已经在其他文章中介绍了自动化的方法,所以在这里进行修正。在运行owncloud或gitbucket等服务器上使用certbot工具。
省略了使用openssl生成CSR等逐一自行操作的步骤。
MariaDB的配置
--- a/conf.d/mariadb.cnf
+++ b/conf.d/mariadb.cnf
@@ -11,7 +11,16 @@
#
# Default is Latin1, if you need UTF-8 set all this (also in client section)
#
-#character-set-server = utf8
-#collation-server = utf8_general_ci
-#character_set_server = utf8
-#collation_server = utf8_general_ci
+character-set-server = utf8
+collation-server = utf8_general_ci
+character_set_server = utf8
+collation_server = utf8_general_ci
+default-storage-engine = innodb
+default_storage_engine = innodb
+innodb-file-format = Barracuda
+innodb_file_format = Barracuda
+innodb-file-per-table = 1
+innodb_file_per_table = 1
+innodb-use-sys-malloc = 0
+innodb_use_sys_malloc = 0
+skip-character-set-client-handshake
sudo systemctl restart mysql.service
吸取。
GRANT ALL PRIVILEGES ON database.* TO username@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
mysql -u root -p < createuser.sql
export MYSQL_PWD=password
mysql -e 'CREATE DATABASe database'
mysql database < backup.sql
通过对类似于WordPress这样依赖于数据库的软件进行重写,同时修复www-data写入位置的权限。
私有云
我尽力尝试了,但是我无法成功地将10.0.7安装在Jessie上。
我下载了9.1.8并成功地安装了它,然后将其升级到10.0.7就能正常运行了。
这次我尝试了从头开始加入调味汁。
-
- 從官方網站下載tarball
-
- 把下載的文件放在想要安裝的位置
設定
在nginx中設定根目錄為安裝位置,並將其傳遞給php-fpm。基本上,建議參考官方網站的手冊(Configuration — ownCloud 10.0.7 Server Administration Manual 10.0.7 documentation),最低限要設定根目錄和fast_cgi相關的設定。
owncloud的資料庫設定(以MariaDB為例)
執行以下命令。請注意,使用者名稱只是資料庫的使用者名稱。
setup.sql
CREATE DATABASE owncloudDBname;
GRANT ALL PRIVILEGES ON owncloudDBname.* to owncloudUSERname@localhost identified by ‘PASSWD’;
FLUSH PRIVILEGES;
設置權限,修改安裝向導中的腳本路徑等信息並執行。
安裝
使用瀏覽器訪問,進行資料庫設定等,完成安裝。
下面是我的计划,可能不会写书。
个人设置 (gè shè zhì)
由于个人喜好不同,所以不管怎样,这边就做吧。
.zsh ->.zsh
.zshenv -> .zshenv
.vimrc -> .vimrc
.vim/bundle -> .vim/bundle
git clone https://github.com/Shougo/neobundle.vim -> 使用 git clone https://github.com/Shougo/neobundle.vim 克隆代码
.dir_colors -> .dir_colors
.tmux.conf -> .tmux.conf
chsh -> chsh