Linux 環境安裝 Node、nginx、docker、vsftpd、gitlab

Linux 環境安裝

centos7

# 更新yum
yum update -y

0. 防火牆 firewalld

新入的JD雲服務器,發現防火牆默認是關閉的。javascript

# 查看防火牆狀態
systemctl status firewalld

# 啓動
systemctl start firewalld
# 中止
systemctl disable firewalld
# 禁用
systemctl stop firewalld

# 開機時啓用
systemctl enable firewalld.service
# 開機時禁用
systemctl disable firewalld.service

# 查看全部打開的端口
firewall-cmd --zone=public --list-ports
# 放開一個端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 關閉一個端口
firewall-cmd --zone= public --remove-port=80/tcp --permanent
# 重載規則
firewall-cmd --reload

1. 使用 nvm 安裝 Node

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

# 激活nvm
source ~/.nvm/nvm.sh

# 安裝node
nvm install node

# 切換到該版本
nvm use node

使用 nvm 管理 node 版本css

# 安裝某版本 好比 4.2.2
nvm install 4.2.2

# 列出遠程服務器上全部可用版本
nvm ls-remote

# 在不一樣版本間切換
nvm use 4.2.2

#安裝最新版 Node
nvm install node

#切換到最新版
nvm use node

#列出已安裝實例
nvm ls

#安裝最新不穩定版本
nvm install unstable

2. 安裝 nginx

# 新環境須要gcc gcc-c++
yum install -y gcc gcc-c++ make

# 下載 openssl 以支持 ssl 功能
# http://www.openssl.org/
wget https://www.openssl.org/source/openssl-1.1.1.tar.gz

# 下載 zlib 支持 gzip
# http://www.zlib.net/
wget http://www.zlib.net/zlib-1.2.11.tar.gz

# 下載 pcre 支持 rewrite
# http://www.pcre.org/
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz

# 下載 nginx 
# http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.16.0.tar.gz

# 解壓
tar zxvf openssl-1.1.1.tar.gz
tar zxvf zlib-1.2.11.tar.gz
tar zxvf pcre-8.43.tar.gz
tar zxvf nginx-1.16.0.tar.gz

# 安裝PCRE庫
cd /usr/local/pcre-8.43
./configure
make && make install

# 安裝SSL庫
cd /usr/local/openssl-1.1.1
./config
make && make install

# 安裝zlib庫
cd /usr/local/zlib-1.2.11
./configure
make && make install

# 將nginx目錄重命名
mv nginx-1.16.0 nginx; cd nginx/

# 安裝nginx
./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-http_sub_module --with-http_ssl_module --with-pcre=/usr/local/pcre-8.43 --with-zlib=/usr/local/zlib-1.2.11 --with-openssl=/usr/local/openssl-1.1.1

make && make install

# 配置開機啓動
cd /lib/systemd/system
vim nginx.service

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 保存退出
systemctl enable nginx.service

# 經常使用命令
systemctl start nginx.service  # 啓動,也可使用sbin/nginx啓動
systemctl stop nginx.service  # 結束nginx 
systemctl restart nginx.service  # 重啓,可以使用sbin/nginx -s reload

# 配置文件
vim /usr/local/nginx/conf/nginx.conf

# 啓動服務
# 啓動
/usr/local/nginx/sbin/nginx
# 重啓 
/usr/local/nginx/sbin/nginx -s reload
# 中止
/usr/local/nginx/sbin/nginx -s quit
/usr/local/nginx/sbin/nginx -s stop
# 查看運行狀態
ps -ef|grep nginx

修改配置文件html

user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  off;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    # 開啓gzip
    gzip  on;
    gzip_buffers 32 4k;
    gzip_comp_level 4;
    gzip_min_length 400;
    gzip_types text/plain application/xml application/javascript;
    gzip_vary on;
    
    server {
        listen       80;
        server_name  www.abc.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /home/www/civ;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html?$query_string;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    # ssl
    server {
        listen 443;
        server_name test.abc.com;
        ssl on;
        ssl_certificate /etc/ssl/server.crt;
        ssl_certificate_key /etc/ssl/server.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        location / {
            root /home/www/test;
            index index.html;
        }
    }
    
    # 80 sub site
    server {
        listen 80;
        server_name sub.abc.com;

        location / {
            root /home/www/sub;
            index index.html;
            try_files $uri $uri/ /index.html?$query_string;
        }
    }
    
    # proxy go-service
    server {
        listen 80;
        server_name api.abc.com;

        charset utf-8;
        access_log /home/www/go/src/api.abc.com.access.log;

        location /(css|js|fonts|img)/ {
            access_log off;
            expires 1d;
            root "/home/www/go/src/static";
            try_files $uri @backend;
        }

        location / {
            try_files /_not_exists_ @backend;
        }

        location @backend {
            proxy_set_header X-Forwarded-For $remote_addr;

            proxy_set_header Host            $http_host;

            proxy_pass http://127.0.0.1:8080;
        }
    }
}

報錯:java

# 1. 若是啓動遇到下面的錯誤
[root@JD nginx]# /usr/local/nginx/sbin/nginx
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2019/07/30 16:00:41 [emerg] 8243#0: open() "/usr/local/nginx/logs/access.log" failed (2: No such file or directory)

# 多是沒有logs目錄致使
# 在nginx目錄下新建一個logs文件夾就能夠了
mkdir logs

3. Docker環境安裝

yum install docker

# 啓動 Docker 的守護進程
service docker start 

# 系統啓動時運行
chkconfig docker on

# 查看當前正在運行的容器
docker ps -a
# 建立容器
docker create
# 建立容器並啓動
docker run
# 退出容器
ctrl+d
# 啓動容器
docker start
# 中止容器
docker stop

4. 安裝 vsftpd

4.1 常規配置 ftp 服務

# 安裝 vsftpd 和 ftp
yum install -y vsftpd
yum install ftp # 爲了在服務器測試ftp鏈接

# 啓動ftp
service vsftpd start
# 設置開機啓動
systemctl enable vsftpd.service
# 查看vsftpd服務是否已開啓
ps -e|grep vsftpd
# 查看vsftpd監聽端口
netstat -ntpl | grep vsftpd

# 開啓防火牆
# 能夠經過服務器安全組設置入站規則開啓21端口
# 放開21端口
firewall-cmd --zone=public --add-port=21/tcp --permanent
# 永久開放 ftp 服務
firewall-cmd --add-service=ftp --permanent
# 關閉ftp服務
firewall-cmd --remove-service=ftp --permanent
# 重啓ftp服務
service vsftpd restart
# 或者
systemctl restart vsftpd


# vsftpd 的配置目錄爲 /etc/vsftpd
vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO # 禁止匿名登錄
pam_service_name=vsftpd
userlist_enable=NO
allow_writeable_chroot=YES

# 建立用戶
useradd -s /sbin/nologin -d /usr/local/web jehorn
passwd jehorn

# 給文件夾增長讀寫權限
chmod o+w /usr/local/web/
# 或者
chmod 775 /usr/local/web/
chmod 777 /usr/local/web/

# 若是須要從新設置用戶主目錄
usermod -d /usr/local/web/ jehorn
# 刪除用戶
userdel -rf jehorn
# 變動用戶屬性
usermod -s /sbin/nologin jehorn (/bin/bash:能夠登陸shell,/bin/false:禁止登陸shell )

# 本地測試ftp服務
ftp localhost
# 輸入用戶名 密碼
# 若是出現如下提示表示配置成功
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp客戶端鏈接:
這裏使用xftp6示例:
注意這裏不使用被動模式,被動模式須要配置隨機端口,這裏再也不贅述。node

4.2 docker 配置 vsftpd

# 拉取鏡像
docker pull fauria/vsftpd

# 建立vsftpd的container
docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /usr/local/web:/home/vsftpd -e FTP_USER=root -e FTP_PASS=123456-e PASV_ADDRESS=123.456.789.0 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
# -p進行端口綁定映射
# -v進行文件目錄的映射 FTP_UESR 和FTP_PASS若是設定了會在container裏面的 
# /etc/vsftpd/virtual_users.txt
# PASV_MIN_PORT和PASV_MAX_PORT映射的是被動模式下端口使用範圍
# PASV_ADDRESS指的的宿主機地址

# 添加用戶
# 進入當前實例
docker exec -i -t vsftpd bash

# 新建用戶文件夾
mkdir /home/vsftpd/jehorn

# 可能會存在沒有權限問題
chown -R ftp:ftp /home/vsftpd

# 編輯配置文件寫入用戶跟密碼
vi /etc/vsftpd/virtual_users.txt

# 把登陸的驗證信息寫入數據庫
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

# 重啓
docker restart vsftpd

5. 安裝gitlab

5.1 傳統安裝方式

# 如下命令還將在系統防火牆中打開HTTP和SSH訪問。
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld

# 安裝Postfix以發送通知電子郵件
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

# 添加GitLab包存儲庫
# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

# 安裝GitLab包。將https://gitlab.example.com更改成您要訪問GitLab實例的URL。
# sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee

# 因爲官方給出的下載地址實在太慢
# 使用 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 下載
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.1.3-ce.0.el7.x86_64.rpm
rpm -ivh gitlab-ce-12.1.3-ce.0.el7.x86_64.rpm 

# 修改配置
vim /etc/gitlab/gitlab.rb

# 修改url
external_url  'http://gitlab.example.com/'
# :1015
# nginx['redirect_http_to_https'] =true 
# nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt" 
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key"

# 因爲服務器一般已經開啓了單獨了nginx服務
# 因此須要禁用gitlab內置nginx
# 禁用內置NG
nginx['enable'] = false
# 指定NG的用戶名
web_server['external_users'] = ['nginx']
#  添加NG地址到信任列表,我這裏就是本機地址
gitlab_rails['trusted_proxies'] = ['127.0.0.1']
# 配置監聽網絡:tcp
gitlab_workhorse['listen_network'] = "tcp"
# 配置GitLab的地址和端口
gitlab_workhorse['listen_addr'] = "127.0.0.1:8020"

# 到這裏執行 gitlab-ctl reconfigure 可能會拋出錯誤,提示 用戶nginx不存在
# There was an error running gitlab-ctl reconfigure:
# account[Webserver user and group] (gitlab::web-server line 27) had an error: Mixlib::ShellOut::ShellCommandFailed: group[Webserver user and group] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/resources/account.rb line 38) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '3'
# ---- Begin output of ["gpasswd", "-a", "nginx", "gitlab-www"] ----
# STDOUT: 
# STDERR: gpasswd: user 'nginx' does not exist
# ---- End output of ["gpasswd", "-a", "nginx", "gitlab-www"] ----
# Ran ["gpasswd", "-a", "nginx", "gitlab-www"] returned 3
# 能夠新增一個用戶 
adduser nginx
# 而後將nginx.conf的user改成nginx後重啓服務便可

# 應用配置
gitlab-ctl reconfigure

# 修改外部nginx配置
server {
    listen       443;
    server_name  gitlab.example.com;

    ssl on;
    ssl_certificate /etc/ssl/gitlab-cert19080152759628cbb70f4f.crt;
    ssl_certificate_key /etc/ssl/gitlab-cert19080152759628cbb70f4f.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8020;
    }

}
# 重啓nginx服務
/usr/local/nginx/sbin/nginx -s reload

而後從瀏覽器打開 https://gitlab.example.com/,會提示你輸入密碼,輸入完成後使用root+剛纔輸入的密碼登陸便可。python

gitlab經常使用命令:linux

gitlab-ctl start                    # 啓動全部 gitlab 組件;
gitlab-ctl stop                    # 中止全部 gitlab 組件;
gitlab-ctl restart                # 重啓全部 gitlab 組件;
gitlab-ctl status                 # 查看服務狀態;
gitlab-ctl reconfigure         # 啓動服務;
vim /etc/gitlab/gitlab.rb      # 修改默認的配置文件;
gitlab-rake gitlab:check SANITIZE=true --trace    # 檢查gitlab;
gitlab-ctl tail                        # 查看日誌;

配置 gitlab 郵箱 postfix:
查看各類郵箱配置能夠參考 https://docs.gitlab.com/omnibus/settings/smtp.html#example-configurationsnginx

# 查看 postfix 狀態
systemctl status postfix

# 這是設置outlook郵箱的示例
vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.office365.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "root@outlook.com"
gitlab_rails['smtp_password'] = "12345six"
gitlab_rails['smtp_domain'] = "outlook.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

gitlab_rails['gitlab_email_from'] = 'jehornguu@outlook.com'
gitlab_rails['gitlab_email_display_name'] = 'Jehorn Git'
gitlab_rails['gitlab_email_reply_to'] = 'jehornguu@outlook.com'

# 重啓配置
gitlab-ctl reconfigure

# 測試郵件服務
gitlab-rails console
Notify.test_email('example@163.com', '郵件標題_test', '郵件正文_test').deliver_now

# 出現如下表示成功
# irb(main):002:0> Notify.test_email('example@163.com', '_test', '_test').deliver_now
Notify#test_email: processed outbound mail in 0.7ms
Sent mail to example@163.com (1263.8ms)
Date: Thu, 01 Aug 2019 16:30:12 +0800
From: Jehorn Git <example@outlook.com>
Reply-To: Jehorn Git <example@outlook.com>
To: example@163.com
Message-ID: <5d42a31478d32_30e3ff7990cf9b011813@JD.mail>
Subject: _test
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>_test</p></body></html>

=> #<Mail::Message:70332342294800, Multipart: false, Headers: <Date: Thu, 01 Aug 2019 16:30:12 +0800>, <From: Jehorn Git <example@outlook.com>>, <Reply-To: Jehorn Git <example@outlook.com>>, <To: example@163.com>, <Message-ID: <5d42a31478d32_30e3ff7990cf9b011813@JD.mail>>, <Subject: _test>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>

**若是郵件發送失敗,看一下是否是郵箱沒有開啓POP、smtp服務。*
**遇到了登陸422的問題,且尚無解決辦法。*c++

5.2 docker安裝方式

# 查詢gitlab鏡像
docker search gitlab

# 咱們選擇穩定版
docker pull gitlab/gitlab-ce

# 運行鏡像
docker run -d  -p 8020:443 -p 8021:80 -p 222:22 -p 587:587 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
# -d:後臺運行
# -p:將容器內部端口向外映射
# --name:命名容器名稱
# -v:將容器內數據文件夾或者日誌、配置等文件夾掛載到宿主機指定目錄

# gitlab.rb文件內容默認全是註釋
vim /home/gitlab/config/gitlab.rb

# 配置http協議所使用的訪問地址,不加端口號默認爲80
external_url 'https://git.example.com'

# 配置ssh協議所使用的訪問地址和端口
gitlab_rails['gitlab_ssh_host'] = 'https://git.example.com'
gitlab_rails['gitlab_shell_ssh_port'] = 222 # 此端口是run時22端口映射的222端口:wq #保存配置文件並退出

# 重啓gitlab
docker restart gitlab

# 因爲我是統一一個nginx管理
# 因此在nginx配置代理
server {
    listen       443;
    server_name  gitlab.example.com;

    ssl on;
    ssl_certificate /etc/ssl/gitlab-cert19080152759628cbb70f4f.crt;
    ssl_certificate_key /etc/ssl/gitlab-cert19080152759628cbb70f4f.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8021;
    }

}
# 重啓nginx服務
/usr/local/nginx/sbin/nginx -s reload

# 配置郵箱參見5.1
# 配置郵箱後須要進入bash應用配置
docker exec -it gitlab bash
gitlab-ctl reconfigure
gitlab-rails console # console調試

# 注意配置完成後重啓docker gitlab
exit
docker restart gitlab

若是出現如下錯誤:git

Error response from daemon: Cannot restart container gitlab: driver failed programming external connectivity on endpoint gitlab (5b2b1b646aea89819e84926057431d119eabd25a0bfe49247b468bde14103367):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8021 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.

基本能夠經過重啓docker解決.

systemctl restart docker

查看日誌:

docker logs -f -t --tail=10 f41c6a557eb6

**跑起來之後內存大概常駐40%(8G物理內存)。*

未完待續 最後更新 2019-8-4 03:41:37

相關文章
相關標籤/搜索