服務器配置日志(Configure Server Logs)


第一日(Day 1)-2016.11.11

今天雙十一,阿里雲 ECS 五折銷售,猶豫了很久還是剁了一台最低配的。

首先選擇了自己比較熟悉的 Ubuntu 14.04 LTS 。

第一天就在 root 用戶下,安裝或配置了 git 、ssh 、 apache 、 python3 、 PHP 、 mysql-server 、 mysql-client 等等一系列軟件,成功了一部分,失敗了一部分。

直到安裝 ruby on rails 的時候,才發現失敗的原因是不能在 root 用戶下使用  gem install 

因為好多東西我只能配置但是不會修改。思索了一會:決定重裝系統! 就這樣,第一天就這樣愉快的過去了。

第二日(Day 2)-2016.11.12

一覺睡到下午,起來吃了點飯,又繼續折騰服務器。

這次行動就沒有那么魯莽了,先對比了一下 Debian 和 RHEL 的區別,又知乎了一下就業形勢:決定選擇 CentOS !

登陸服務器之后第一件事就是  #useradd -g root admin  ,給自己創造了一個屬組為 root 的管理員賬號(username 略,以下用 admin 簡稱)。

因為昨天走過一次流程了,順便也加了 git:git用戶。 

別忘了設置密碼:passwd admin 還要把 admin 加入  /etc/sudoers #chmod 770 /etc/sudoers ) 

開啟免密碼登陸需要打開  /etc/ssh/sshd_config  中  PubkeyAuthentication yes #chmod 770 /etc/ssh/sshd_config )

然后  su admin  切換到管理員賬戶進行環境配置。

OpenSSH

以下命令行中本地主機和遠程主機分別用 user@local 和 admin@remote 代替。

本地需要先生成 ssh key,如果之前已經生成過了略過這一步。

 ssh-keygen -t rsa -C "user@local" 

需要注意的是 "user@local" 並不是你的電子郵件,這個是一個 identifier ,在一些 authorized_keys 列表中用來區分不同主機的。寫一個自己能記住的,主機也能認識的名字,格式最好是 用戶@主機 。

之后出現的目錄提示如果不修改,則會在提示中的默認路徑 ~/.ssh/ 內生成公鑰 id_rsa.pub和私鑰 id_rsa 。密碼可輸入亦可忽略。

然后查看一下自己的公鑰:

 cat ~/.ssh/id_rsa.pub 

會輸出類似這樣的文字:(我把我的公鑰修改過粘貼過來的)

ssh-rsa AADFB3NzaC1yc21234567890/j3xzZFP6KkPRbvrK/n5Eo3IaOEfOAssvjK1ye/TBi8EXGoOl+BUWBhpt1X1M4iDkYY23q12345678901234567890YVMitWldnwekgdkxtIIKPoaKUsmMlEDxM741FD91234567890-1234567890vuHNN9VvQdtY6VDWkZLhNoePbiomFFdiBz89PLX6ssWCOTOS+JgUX0VSuVu003iV123456789012345678901234567890RjwqVBAJfZ2UpK9UThPTzdXB2d/+mUbqxc8oZdyqXVoNbCsumbz3wfadxLpwPU6RlGnxHQfrZH9M21kZ47GL user@local

遠程服務器上在每個用戶的  ~/.ssh/authorized_keys  里添加這段公鑰。如果有其他用戶需要登陸,每行一個。

划重點!(敲黑板)

為了能讓用戶免密碼登陸,修改如下目錄權限:

/home/$USER/ : 755(drwxr-xr-x)(744,740都可以)
/home/$USER/.ssh : 700(drwx----)
/home/$UESR/.ssh/authorized_keys : 600 (-rw-----)

修改 /etc/ssh/sshd_config 中:

RSAAuthentication yes
PubkeyAuthentication yes

其實:用ssh-copy-id username@remotehost就行了。300多行的腳本幫我們做了這些事情。

如果服務器系統重裝了,請務必刪掉 local known_hosts 中保存的主機信息。

第三日(Day 3)-2016.11.13

Git

配置 git 倉庫服務器不要去搜索引擎搜索,直接看廖雪峰老師的教程就行——你的 git 用戶數量根本用不到 gitosis 來管理 ssh 證書!

要注意目錄權限!要注意目錄權限!要注意目錄權限!

然后按照 SSH 設置方式,把  /home/git/.ssh/authorized_keys  及目錄權限都配置好,就可以免密碼使用 git 了。

user@local:

clone 下來的倉庫第一次是不能直接 push 的,按照貼心的提示加上參數就可以了。

admin@remote:

需要注意的是,git 服務器上保存的 push 文件,存在 objects 目錄下,用一種奇怪的打包方式保存着。

可以通過 cat /home/git/<respository_name>.git/objects/<short_folder_name><file_name> 來查看保存的是什么文件。

如果想用類似 GitHub 那樣可視化的檢查文件,可以通過 <respository_name>.git/hooks/ 來自動部署到 Apache 服務器上。

不過還是推薦使用 GitBucket private repository,不把雞蛋裝到同一個籃子里。

第四日(Day 4)-2016.11.14

Apache

直接使用  # yum install apache2  即可

不推薦直接使用。用NginX反向代理來配置apache最好。

NginX

如果編譯安裝,參考官方《Nginx中文文檔》

這里我選擇了一個簡單的方式:

 # yum install nginx 

配置:

這里需要另開一篇文章單獨介紹。

第五日(Day 5)-2016.11.15

MySQL

 # yum install mysql 

通常安裝一個包,最好是去官網下載一個最新版的。 wget 下載到  /usr/local/src/ 

./configure
make
make install

cmake的參數參考官網: Chapter 4 MySQL Source-Configuration Options

這些都是典型的使用GNU的AUTOCONF和AUTOMAKE產生的程序的安裝步驟。
./configure是用來檢測你的安裝平台的目標特征的。比如它會檢測你是不是有CC或GCC,並不是需要CC或GCC,它是個shell腳本。
make是用來編譯的,它從Makefile中讀取指令,然后編譯。
make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。
AUTOMAKE和AUTOCONF是非常有用的用來發布C程序的東西。
-----
1、configure,這一步一般用來生成 Makefile,為下一步的編譯做准備,你可以通過在 configure 后加上參數來對安裝進行控制,比如代碼:./configure –prefix=/usr 意思是將該軟件安裝在 /usr 下面,執行文件就會安裝在 /usr/bin (而不是默認的 /usr/local/bin),資源文件就會安裝在 /usr/share(而不是默認的/usr/local/share)。同時一些軟件的配置文件你可以通過指定 –sys-config= 參數進行設定。有一些軟件還可以加上 –with、–enable、–without、–disable 等等參數對編譯加以控制,你可以通過允許 ./configure –help 察看詳細的說明幫助。
2、make,這一步就是編譯,大多數的源代碼包都經過這一步進行編譯(當然有些perl或python編寫的軟件需要調用perl或python來進行編譯)。如果 在 make 過程中出現 error ,你就要記下錯誤代碼(注意不僅僅是最后一行),然后你可以向開發者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系統少了一些依賴庫等,這些需要自己仔細研究錯誤代碼。
3、make insatll,這條命令來進行安裝(當然有些軟件需要先運行 make check 或 make test 來進行一些測試),這一步一般需要你有 root 權限(因為要向系統寫入文件)。
-----
Linux的用戶可能知道,在Linux下安裝一個應用程序時,一般先運行腳本configure,然后用make來編譯源程序,在運行make install,最后運行make clean刪除一些臨時文件。使用上述三個自動工具,就可以生成configure腳本。運行configure腳本,就可以生成Makefile文件,然后就可以運行make、make install和make clean。
configure是一個shell腳本,它可以自動設定源程序以符合各種不同平台上Unix系統的特性,並且根據系統叄數及環境產生合適的Makefile文件或是C的頭文件(header file),讓源程序可以很方便地在這些不同的平台上被編譯連接。
這時,就可運行configure腳本了,運行configure腳本,就可產生出符合GNU規范的Makefile文件了:
$ ./configure
到此時,就可以運行make進行編譯,在運行make install進行安裝了,最后運行make clean刪除臨時文件。
$ make
$ make install           (注:運行這個要有足夠的權限)
$ make clean
利用configure所產生的Makefile文件有幾個預設的目標可供使用,其中幾個重要的簡述如下:
make all:產生我們設定的目標,即此范例中的可執行文件。只打make也可以,此時會開始編譯原始碼,然后連結,並且產生可執行文件。
make clean:清除編譯產生的可執行文件及目標文件(object file,*.o)。
make distclean:除了清除可執行文件和目標文件外,把configure所產生的Makefile也清除掉。
make install:將程序安裝至系統中。如果原始碼編譯無誤,且執行結果正確,便可以把程序安裝至系統預設的可執行文件存放路徑。如果用bin_PROGRAMS宏的話,程序會被安裝至/usr/local/bin這個目錄。
make dist:將程序和相關的檔案包裝成一個壓縮文件以供發布。執行完在目錄下會產生一個以PACKAGE-VERSION.tar.gz為名稱的文件。 PACKAGE和VERSION這兩個變數是根據configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定義。在此范例中會產生test-1.0.tar.gz的檔案。
make distcheck:和make dist類似,但是加入檢查包裝后的壓縮文件是否正常。這個目標除了把程序和相關文件包裝成tar.gz文件外,還會自動把這個壓縮文件解開,執行 configure,並且進行make all 的動作,確認編譯無誤后,會顯示這個tar.gz文件可供發布了。這個檢查非常有用,檢查過關的包,基本上可以給任何一個具備GNU開發環境-的人去重新編譯。

注意:1G內存無法編譯安裝MySQL5.5,請更換低版本或者臨時增加swap區。

在linux下增加臨時swap空間

 

Step 1:
 # dd if=/dev/zero of=/home/swap bs=64M count=16  

 

  • of=/home/swap,放置 swap 的空間;
  • count=16 的大小就是增加的 swap 空間的大小,bs = 64M 就是塊大小
  • 所以總共空間就是 bs * count = 1024 MB.
  • 這里分配空間的時候需要一點時間,等待執行完畢。

 

 # mkswap /home/swap 
  • 可能會提示warning: don't erase bootbits sectorson whole disk. Use -f to force,不用理會。
  • 把剛才空間格式化成 swap 格式
Step 3:
 # swapon /home/swap 
# 激活剛才創建的 swap 空間
Step 4:
執行你相關的操作,如make
如果創建了臨時空間仍然提示 "g++: 內部錯誤:Killed (程序 cc1plus)",可能分配的空間不夠大,可繼續分配更大的空間。

關閉:

step 1:
 # swapoff /home/swap 

step 2:
 # rm /home/swap 
1 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2 [Warning] InnoDB: New log files created, LSN=45790
3 [Warning] InnoDB: Creating foreign key constraint system tables.
4 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 128f7e01-1ae2-11e7-8c10-00163e059525.
5 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
6 [Note] A temporary password is generated for root@localhost: GiB%3ca:,qw(

配置好之后可以用以下命令登錄到 mysql cli:

 $ mysql -uroot -p 
# 這個地方輸入剛才安裝成功之后給你生成的臨時密碼。
# 比如我的初始密碼:GiB%3ca:,qw(

第一次登錄會提示你要修改密碼,我是 5.7.17 它總提示我用 ALTER USER 修改。 搜索文檔結果發現這是 5.7.5 之后的命令。

具體教程參考官網: B.5.3.2 How to Reset the Root Password

MySQL 5.7.6 and later:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.5 and earlier:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

如果你之前配置目錄寫錯了,請同時修改  /etc/my.cnf  和  path/to/mysql/bin/mysqld 

最重要的是要配置一個高可用的mysql,需要修改/etc/my.cnf

# 這個需要單開一篇文章來詳述配置的每條命令。

第七日(Day 7)-2016.11.17

因為我買的是最低配置的 ECS,導致編譯安裝 MySQl 用了超過24小時。 昨天休息一天,今天繼續。

PostgreSQL

遵循 BSD 協議的開源數據庫。(暫時還沒學會!)

Ruby on Rails

Gem

看名字就知道,gem是寶石的統稱,ruby是紅寶石,所以gem一定跟ruby有關系。

安裝:  # yum install rubygems 

修改 gem 源為國內鏡像:  $ gem sources --add https://gems.ruby-china.org/ --remove https://rubygems/org/ 

然后檢查一下是否是唯一源:  $ gem sources -l 

local 創建 rails 工程時,rails new project 在 bundle install 卡住的解決辦法:

find /path/to/your/gems/ -name "Gemfile" | xargs sed -i -e "s%rubygems.org%gems.ruby-china.org%g"

# \ / : % 都可以作為定界符來使用。。。

批量修改全部的Gemfile源。

我這里是 macOS,包括開發 iOS 時用到的 cocoaPods 也悉數在目。

RVM

用於安裝不同版本的ruby,以及輕松切換ruby環境。

先驗證 gpg2 需要下載如下文件:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

安裝 RVM:

\curl -sSL https://get.rvm.io | bash # 最新的開發版
# 或者
\curl -sSL https://get.rvm.io | bash -s stable # 最新的發行版(推薦)

然后需要將 RVM 添加到命令行:

source ~/.zshrc # 使用 zsh
# 或者
source ~/.profile # 使用 bash

Ruby

推薦使用 RVM 來安裝 Ruby:

查看所有版本: $ rvm known list 

安裝某個版本: $ rvm install 2.4.0 

切換到某個版本: $ rvm use 2.4.0 --default 

此時如果遇到了 

rvm is not a command

 按照提示重新登錄  shell /usr/bin/zsh --login 

Python3

貌似只有編譯安裝方式,同MySQL。

使用  ln -s /usr/local/python3.6/bin/python3 /usr/bin/python3  創建一個軟連接到系統環境變量中。

我在服務器上將 python 重新鏈接到 python3 上,並修改原 python 為 python2

這樣會導致一個問題:很多安裝腳本是用py2書寫的,和py3在格式上會有差異。

有時候 ./configure 提示 syntex error 的時候不要驚慌,按照提示打開指定文件,

修改首行  #!/usr/bin/python  為  #/usr/bin/python2  即可。

Flask

Tornado

Django

這幾個略過不講了,安裝沒什么難度。

PHP7

阿里雲源包含了絕大部分的包,不用下面那么麻煩。

 

安裝EPEL源(Extra Packages for Enterprise Linux) 

# yum install epel-release

 

獲取PHP7源 

$ rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 

 

指定源來安裝PHP7。

# yum install –enablerepo=remi-php70 -y php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd 

你可以使用  $ yum info –enablerepo=remi-php70 php  查看版本。

或者直接執行 

# yum install php71

 

不過朋友推薦用編譯安裝方式,如果想增加插件,可以重新編譯。

具體請參考簡書文章: 《Centos7 安裝 PHP7最新版》–我來自塘湖(2016.03.24 15:25)

ThinkPHP

Laravel

Yii 2

這三個也略過了。

Jekyll

這個不想在自己服務器上部署了,用gh-pages服務挺好的。

Markdown

一個解釋器而已,不想部署了。

結語(Conclusion)

本篇文章重點在於:

  • Linux 的權限分配——包括用哪些用戶來運行哪些服務。秉承着最小權限原則(Least Priviledge)來設置每個目錄的權限,分配每個服務的運行者。
  • 簡述了 ssh 遠程登錄的操作和需要注意的問題。
  • 熟悉了一些編譯源碼來安裝軟件包的方法,引申出來的問題學會了如何創建臨時 swap 區。
  • 想要統一修改 Gemfile 的源,學習到了 find exec 后面跟着的 xargs 參數 以及 sed -i -e 的用法。
  • 學會了如何編譯安裝 PHP7 以及編譯時所加參數的意義,學會了開啟 fpm 跟 NginX 聯動,學會了如何編譯安裝新插件。
  • 學習到了如何在一台服務器上使用 NginX 開啟多個不同的 web server,並且綁定不同的域名。

學習使我快樂!

全篇寫完並修改於:2017-04-10 20:52


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM