在Debian安装完成后的设置备忘录

安装debian时的备注

首先

这份备忘录是为了在当前服务器无法应对某CPU供应商的漏洞而需要升级操作系统主版本的情况下,避免每次都花费时间进行查询而记录下工作内容而存在的。

前提

有一个作为参考的原始服务器。
安装选项采用基本最小配置。(只安装SSH可能更快。在EC2上,由于没有控制台模拟器,这是必需的)
假设从云端VPS上的ISO镜像进行安装。

办事清单

允许进行SSH登录

    1. 实现密码登录。

 

    1. 开放端口。

 

    1. 在内部使用端口22是可以的,但是向外使用另一个端口会更好。在这里我们使用40002。

 

    1. 此时,防火墙只开放40002。

 

    1. 可以配置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.

    1. 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,我会自己从源代码中安装。

    1. 将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就能正常运行了。

这次我尝试了从头开始加入调味汁。

    1. 從官方網站下載tarball

 

    1. 把下載的文件放在想要安裝的位置

設定
在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

广告
将在 10 秒后关闭
bannerAds