內網環境如何配置運行環境

內網環境如何配置運行環境

目前很多國企或者單位對保密性有要求,不允許宿主機環境連接外部網絡,也不提供跳板機搭建代理訪問,所以很多環境都需要自己手動編譯安裝調試,現在將自己的完整的環境部署流程記錄下來,以做後續參考,本文操作時的操作系統如下。

系統環境 CentOS 7.9.2009

1. 準備工作

  1. 下載MobaXtermSSH連接軟件

  2. 確定系統版本

     # 適用於紅帽系列 / centos
     cat /etc/redhat-release
     # 適用於 Ubuntu / debian
     lsb_release -a
    

    本系統獲取信息如下

    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    
    
  3. 瞭解部分linux相關命令

  4. 雖然無法連接外網,但是系統中本身具有部分yum緩存可以安裝例如vim,無法使用 yum安裝的,採用上傳編譯

  5. 預安裝

    yum install vim
    

2. Linux命令

Linux命令衆多,可以參考下方地址查閱所需命令

https://www.runoob.com/w3cnote/linux-common-command.html

防火牆

  • 查看已經放行的端口
sudo firewall-cmd --list-ports
  • 放行TCP端口
sudo firewall-cmd --zone=public --add-port=端口號/tcp --permanent
sudo firewall-cmd --reload
  • 放行UDP端口
sudo firewall-cmd --zone=public --add-port=端口號/udp --permanent
sudo firewall-cmd --reload

文件

  • 解壓gz文件
tar -zxvf xxx.gz
  • 解壓xz文件
tar -xJf xxx.xz 

端口

  • 查看端口占用
lsof -i:8080
  • 解除端口占用
kill -9 PID

3. 開啓root登錄權限

如果不以 root 賬戶登錄,使用 ssh 工具客戶端進行文件上傳可能會導致權限不足問題

連接服務,鍵入命令修改root用戶密碼

sudo passwd root

修改配置項

vi /etc/ssh/sshd_config

配置

PermitRootLogin yes

重啓服務

service sshd restart

MobaXterm上使用root賬戶登錄

4. Java 環境安裝

yum緩存有 jdk11

yum install java

成功安裝

5. Python 3.9.18 環境安裝

下載地址

鏈接: https://caiyun.139.com/m/i?105CqKL86WHer  提取碼:aSjt

解壓安裝

構建存儲地址

mkdir /opt/python3

將壓縮包上傳至該目錄下並解壓

tar -xJf Python-3.9.18.tar.xz 

在解壓後的Python 3.9文件夾中,執行以下命令來安裝Python 3.9

./configure
make && make install

遇到缺少依賴包錯誤,先嚐試使用yum安裝

驗證

python3 --version

5. MySQL 8.0安裝

下載地址

鏈接: https://caiyun.139.com/m/i?105CpgTuMNOp6  提取碼:gqEF

解壓安裝

原系統中可能存在mariadb,需要先清除該數據庫

# 查詢
rpm -qa|grep mariadb
# 清理
rpm -e --nodeps mariadb-libs

構建應用存放目錄

mkdir /opt/mysql

將壓縮包上傳至該目錄下並解壓

tar -xvf mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar -C mysql

解壓該目錄獲得以下文件,依次使用rpm安裝

mysql-community-libs-8.0.34-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.34-1.el7.x86_64.rpm
mysql-community-devel-8.0.34-1.el7.x86_64.rpm
mysql-community-server-8.0.34-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.34-1.el7.x86_64.rpm
mysql-community-client-8.0.34-1.el7.x86_64.rpm
mysql-community-common-8.0.34-1.el7.x86_64.rpm
mysql-community-test-8.0.34-1.el7.x86_64.rpm

按照如下順序安裝

rpm -ivh mysql-community-common-8.0.34-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-plugins-8.0.34-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-8.0.34-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-8.0.34-1.el7.x86_64.rpm

rpm -ivh mysql-community-icu-data-files-8.0.34-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-8.0.34-1.el7.x86_64.rpm

錯誤1

warning: mysql-community-devel-8.0.34-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
    pkgconfig(openssl) is needed by mysql-community-devel-8.0.16-2.el7.x86_64

解決方案

yum緩存中應該有這些包,沒有就手動編譯

yum install openssl-devel.x86_64 openssl openssl.x86_64 -y

再次執行報錯命令

錯誤2

warning: mysql-community-test8.0.34-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
error: Failed dependencies:
    perl(Data::Dumper) is needed by mysql-community-test-8.0.34-1.el7.x86_64
    perl(JSON) is needed by mysql-community-test-8.0.34-1.el7.x86_64

解決方案

yum install perl.x86_64 perl-devel.x86_64 -y

yum install perl-JSON.noarch -y

yum -y install autoconf

再次執行報錯命令

初始化配置

  1. 執行命令查看mysql運行情況
systemctl status mysqld
  1. 停止服務
service mysqld stop
  1. 初始化數據庫
mysqld --initialize --console
  1. 目錄授權
chown -R mysql:mysql /var/lib/mysql/
  1. 啓動mysql
systemctl start mysqld
  1. 獲取臨時密碼
cat /var/log/mysqld.log

如下,獲取到的臨時密碼就是 0d.Kds3fs:3W

2023-09-23T11:50:08.568177Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 0d.Kds3fs:3W
  1. 登入數據庫
[root@localhost /]# mysql -uroot -p
Enter password:

然後輸入臨時密碼(輸入時不會顯示出來,輸入完直接回車)

  1. 修改臨時密碼
alter USER 'root'@'localhost' IDENTIFIED BY '你的密碼';
alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密碼';
flush privileges;
  1. 授權遠程連接
use mysql;

update user set host = "%" where user='root';

flush privileges;

select host, user, authentication_string, plugin from user;
  1. 放行 3306 端口,遠程連接數據庫,放行命令參考 2

5. Redis 7.0 安裝

下載地址

鏈接: https://caiyun.139.com/m/i?105CpMTVxjCZ5  提取碼:0qyO

解壓安裝

構建應用存放目錄

mkdir /opt/redis

將文件上傳至該目錄下並解壓

tar -zxvf redis-7.0.13.tar.gz

編譯安裝

make && make install

初始化配置

  1. 配置項遷移

進入/opt/redis/redis-7.0.13目錄將 redis解壓目錄下redis.conf複製一份到 /etc/redis.conf

cp redis.conf /etc/redis.conf
  1. 修改配置文件
vim /etc/redis.conf

配置允許後臺啓動

daemonize yes

配置允許遠程連接

bind 0.0.0.0

配置遠程訪問連接密碼

requirepass 你的密碼
  1. 放行 6379 端口

服務守護

/etc/systemd/system下新建redis.service,編輯錄入以下內容

[Unit]
Description=Redis
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecReload=/usr/local/bin/redis-server -s reload
ExecStop=/usr/local/bin/redis-server -s stop
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

執行服務重載,redis 後臺運行並且開啓自啓

# 重載配置
systemctl daemon-reload
# 重啓redis
systemctl restart redis

6. Docker 安裝

系統可能默認自帶 docker,可以輸入命令查

docker -v

如果沒有可以 yum install docker

鏡像導出

更多docker相關命令,請去查詢文檔

在無網絡服務器中無法從網絡直接下載鏡像,但是我們可以本地上傳並加載,下面是從已安裝鏡像服務器導出鏡像的命令

docker save -o 導出文件名.tar 導出鏡像名
# 例
docker save -o nginx.tar nginx:latest

鏡像導入

將鏡像上傳至服務器,運行如下命令,導入鏡像文件

docker load -i xxxx.tar

導入錯誤1

導入可能會出現依賴錯誤問題

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /var/run/docker/containerd/daemon/io.containerd.runtime.v2.task/moby/99524ed55992ee515e4a47f54023826133a66d3aa573386675a2b5ad48d6b23d/log.json: no such file or directory): runc did not terminate successfully: exit status 127: runc: error while loading shared libraries: libseccomp.so.2: cannot open shared object file: No such file or directory
: unknown.

執行如下命令修復

yum install libseccomp

再次執行鏡像導入命令

容器構建

以構建onlyoffice服務爲例

docker run -i -t -d -p 9004:80 --restart=always onlyoffice/documentserver

將宿主機端口 9004 映射到 容器 80 端口,並設置自動重啓, 指定容器使用的鏡像名稱爲 onlyoffice/docmentserver

onlyoffice鏡像下載地址

鏈接: https://caiyun.139.com/m/i?105CfN2XO4gzx  提取碼:WGGJ

服務守護

/etc/systemd/system下新建docker.service,編輯錄入以下內容

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false -H unix://
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process

Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

執行服務重載

# 重載配置
systemctl daemon-reload
# 重啓redis
systemctl restart docker

7. Nginx 安裝

下載地址

鏈接: https://caiyun.139.com/m/i?105CpMRR2Qu8p  提取碼:Xgqt  複製內容打開中國移動雲盤手機APP,操作更方便哦

解壓安裝

  1. 構建安裝目錄
mkdir /opt/nginx
  1. 將壓縮包上傳至該目錄下並解壓
tar -zxvf nginx-1.20.2.tar.gz
  1. 下載編譯工具庫(yum緩存中有)
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
  1. 進入解壓後的目錄執行命令
./configure --prefix=/usr/local/nginx --with-http_v2_module --with-http_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_stub_status_module
  1. 執行安裝
make && make install

服務守護

/etc/systemd/system下新建nginx.service,編輯錄入以下內容

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

執行服務重載

# 重載配置
systemctl daemon-reload
# 重啓redis
systemctl restart nginx

項目部署

  1. 構建項目存儲地址
mkdir /www/vue
  1. 在本地將 Vue項目打包並將dist上傳至該目錄下

  2. 修改配置文件

vim /usr/local/nginx/conf/nginx.conf

修改後如下所示


#user  nobody;
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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /www/vue/dist;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        #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;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

  1. 重啓nginx
systemctl restart nginx
  1. 正常訪問 80端口如果沒放行需要放行

8. node 安裝

推薦安裝 v16版本,降至該版本後,未出現參考[3]中所提到的問題

官方下載地址 :https://nodejs.org/dist/

阿里雲鏡像地址:https://mirrors.aliyun.com/nodejs-release/

選擇自己要下載的版本,下載後上傳至服務器 /usr/local

此下的命令不可以直接複製,需要對應自己下載的版本

#解壓文件
tar -zxvf /usr/local/node-v16.x-linux-x64.tar.gz -C /usr/local

#重命名文件夾
mv /usr/local/node-v16.x-linux-x64 /usr/local/node-v16.x

#刪除下載的壓縮包
rm -rf /usr/local/node-v16.x-linux-x64.tar.gz

配置環境變量

echo 'export NODE_HOME=/usr/local/node-v16.X' >> /etc/profile
echo 'export PATH=$PATH:$NODE_HOME/bin' >> /etc/profile

刷新配置

source /etc/profile

檢查

node -v

9. Docker 鏡像

對於一些在沒有網絡環境下,配置比較繁瑣的項目,可以採用 docker鏡像構建上傳至內網服務器裝載的方式進行

Python

現在以構建FastAPI(Python)項目爲例展示一下構建過程

項目結構如下

lco
	src // 代碼目錄
	main.py
	requirement.txt
	Dockerfile
	...

1. 導出 依賴文件

pip list --format=freeze > requirements.txt

2. 修改啓動文件

加入main函數,使執行啓動命令


if __name__ == '__main__':
    uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=False)

3. 構建 Dockerfile

# 設置基礎鏡像
FROM python:3.9
# 設置代碼文件夾工作目錄 /app
WORKDIR /app
# 複製當前代碼文件到容器中 /app
ADD . /app
# 設置時間
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 更新 pip 源
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安裝所需的包,這裏的requirements文件名需和項目生成的一致
RUN pip install -r requirements.txt
# 指定端口
EXPOSE 8000 80
# 執行入口文件
CMD ["python", "main.py"]

4. 構建 Docker images

進入項目目錄下,執行如下命令

docker build -t 鏡像名稱 .

存在衝突依賴就清理修改requirement.txt文件

5. 運行測試

將鏡像導出並上傳到內網服務器,運行如下命令裝載鏡像

也可以先在本機完成對應測試

docker load -i 鏡像名稱.tar

查看鏡像列表

docker images

構建執行容器,並將容器網絡掛載到宿主機

docker run --name 容器名稱 -d --network=host 鏡像名稱

防火牆放行對應端口,例如我的端口就是 8000

執行訪問測試

參考

[1] Centos7離線安裝mysql8. He_lh. CSDN [EB/OL]

[2] CentOS7.x編譯安裝nginx 1.20.2,實現HTTP2 . Dr.愽. 博客園 [EB/OL]

[3] CentOS安裝NPM. 黃輝. 知乎 [EB/OL]

[4] 無網絡環境,如何部署Docker鏡像. 菜鳥厚非. CSDN [EB/OL]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章