個人部落格的上雲之路
一轉眼已經做了3年多的Web開發,但是還沒有一個自己的個人網站,確實感覺有點說不過去。這段時間剛好公司不太忙,閒來無事就開始琢磨這個事。我們開發網站肯定得在公網上有一臺自己的伺服器,現在這伺服器很好解決,各大廠商整天都在宣傳自己的雲,我們直接在上邊租一臺伺服器就可以了。我這裡選用的阿里雲,不為別的就只是因為這幾天阿里雲搞活動很便宜。然後我們還得有一個web容器,我這裡選的tomcat,至於資料庫那肯定是選擇Mysql了。還有就是反向代理服務我這選用的nginx。最後就是應用了,我這裡直接使用的是Solo開源部落格。剛好前段時間學習了一下docker,畢竟現在你要說你不會使用虛擬容器技術你都不好意思說你是搞Web開發的,所以前邊提到的這些服務最終都會使用docker來執行。
1. 準備伺服器
之前也說了,我這裡直接選用的是阿里雲。可以直接上阿里雲上的官網買一臺自己的伺服器,步驟很簡單,這裡就不再多說。需要注意的就是在預裝環境這一塊我們選擇系統映象,作業系統選擇Ubuntu或者是CentOS都可以,我這裡選擇的是Ubuntu。下面的例子都是在Ubuntu上執行的,和CentOS不同的可能就是一些軟體安裝的命令存在差異。還有就是設定賬戶密碼,這個密碼請務必妥善儲存,以後登陸伺服器時要用。購買完成之後, 我們會收到簡訊和郵件,裡邊有我們的公網Ip。然後使用Xshell就通過這個Ip地址以及賬戶和密碼就可以登陸到我們伺服器上了。如下圖所示:
登陸到服務期之後,因為我這裡使用的是docker來執行所有的服務,所以我們只需要安裝docker就可以了,執行如下命令:
1.靜默更新系統,-qq引數需要用在apt-get子命令之前,-y隨意 apt-get -qq update -y 2.安裝wget工具用於下載檔案 which wget> /dev/null || apt-get -qq install -y wget 3.新增docker的軟體倉庫key wget -qO- https://get.docker.com/gpg | apt-key add - 4.執行docker安裝程式 wget -qO- https://get.docker.com/ | sh 5.執行docker的測試命令,通過此命令看一看到docker引擎的版本等資訊 docker version
至此我們已經準備好web伺服器。
2. 配置Mysql
首先我們需要使用如下命令來獲取mysql的docker映象。
1. 獲取5.7版本的mysql映象 docker pull mysql:5.7 2. 檢視獲取的映象 docker images
建立msyql配置檔案
1. 建立msyql資料夾 mkdir -p /usr/web/mysql/conf.d 2. 建立mysql配置檔案 cd /usr/web/mysql/conf.d touch mysqld.cnf 3. 填入myslq配置內容 [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost bind-address = 0.0.0.0 character-set-server=utf8mb4 default-time-zone='+08:00' max_connect_errors=10 max_connections=200 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysql] # 設定mysql客戶端預設字符集 default-character-set=utf8 [client] # 設定mysql客戶端連線服務端時預設使用的埠 default-character-set=utf8 3.建立資料目錄 mkdir ../data
啟動mysql
docker run --name mysql5.7 -p 3306:3306 -v /usr/web/mysql/conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /usr/web/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
--name 是給mysql服務起的名字
-p 是做埠對映,可通過訪問本機的3306埠來訪問mysql容器的的3306埠
-v 將本機相應目錄的檔案或者資料夾和mysql容器中的檔案或資料夾做一個對映
-e 設定mysql的屬性
-d 在後臺執行命令
建立資料庫
1. 檢視正在執行容器 docker ps 2. 進入mysql容器 docker exec -it mysql5.7 bash 3. 進入資料庫 mysql -u root -p 4. 建立資料庫 create database solo;
3.配置Tomcat
獲取Tomcat映象
docker pull tomcat:9.0.12
建立Tomcat配置資料夾
1.建立Tomcat配置資料夾 mkdir -p /usr/web/tomcat/logs mkdir -p /usr/web/tomcat/webapps
啟動tomcat
dockerrun -d tomcat:9.0.12
複製tomcat配置檔案
1. 檢視tomcat container id docker ps 2. 複製tomcat 配置檔案 docker cp [CONTAINERID]:/usr/local/tomcat/conf/usr/web/tomcat
修改server.xml配置檔案,設定solo為根路徑因此當我們訪問專案是就不再需要新增專案名稱
新增<Context path="" docBase="/usr/local/tomcat/webapps/solo"debug="0" reloadable="true" /> 到 <host>中
停止並且刪除tomcat容器
docker stop [CONATINERID] docker rm [CONATINERID]
新增solo.war到/usr/web/tomcat/webapps中, 在執行下面的命令重新建立並啟動tomcat容器
docker run --name my_tomcat1 --link mysql5.7:mysql.local -v /usr/web/tomcat/logs:/usr/local/tomcat/logs -v /usr/web/tomcat/conf.d:/usr/local/tomcat/conf -v /usr/web/tomcat/webapps:/usr/local/tomcat/webapps -p 8080:8080 -d tomcat:9.0.12
--link 連線另一個docker容器,當前連線的mysql5.7容器,並且給給mysql5.7起了一個別名mysql.local. 這個命令會將mysql.local與mysql5.7的ip地址對應起來寫入tomcat的hosts中,因此在solo專案中的資料庫地址就可以直接使用mysql.local
4.配置Nginx
當前我們其實已經可以使用ip加埠號訪問我們應用了(注意阿里雲預設是關閉8080埠的,如需開啟請去阿里雲管理平臺開啟)。
獲取Nginx映象
docker pull nginx
建立nginx資料夾以及nginx配置檔案
1.建立nginx資料夾 mkdir -p /usr/web/nginx/conf.d 2. 建立 配置檔案 cd /usr/web/nginx touch nginx.conf touch conf.d/default.conf
nginx.conf內容如下
usernginx; worker_processes1; error_log/var/log/nginx/error.log warn; pid/var/run/nginx.pid; events { worker_connections1024; } http { include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log/var/log/nginx/access.logmain; sendfileon; #tcp_nopushon; keepalive_timeout65; #gzipon; #建立tomcat1服務 upstream tomcat1{ servertomcat:8080; } include /etc/nginx/conf.d/*.conf; }
default.conf內容如下
server { listen80; server_namelocalhost; #charset koi8-r; access_log/var/log/nginx/host.access.logmain; #將所有來自80埠的請求轉發到之前檔案中定義服務tomcat1 location / { proxy_pass http://tomcat1; } #error_page404/404.html; # redirect server error pages to the static page /50x.html # error_page500 502 503 504/50x.html; location = /50x.html { root/usr/share/nginx/html; } }
啟動Nginx容器
docker run --name nginx1 --link my_tomcat1:t1 -v /usr/web/nginx/conf.d:/etc/nginx/conf.d -v /usr/web/nginx/nginx.conf:/etc/nginx/nginx.conf -p 80:80 -d nginx
到此我們已經可以通過Ip訪問我們的solo應用了
5.購買域名繫結Ip地址
我們可以在阿里雲旗下的 ofollow,noindex">萬網 註冊一個自己的域名,然後實名認證。接下來就需要備案了,按照阿里雲的備案流程執行就好了,大概一週左右。備案完成之後我們只需要將域名解析設定為我們自己的IP即可。如下圖:
這樣我們的應用就直接可以使用我們之前註冊的域名來訪問了。這篇通過docker來分別部署服務的過程還是太過複雜,實際上應該沒人這麼幹。下一篇我將介紹docker compose,通過它來進行服務編排,
我們只需一個命令就可以啟動上邊所有的服務。