Tag Archive site

Apache: VirtualHost

ถ้าต้องการเพิ่มเว็บเข้าไปใน host โดยที่แยกคนละ site คนละโดแมนออกจากกันเพื่อความสะดวกในการดูแล

  1. เพิ่ม directory สำหรับเก็บข้อมูลก่อน
    sudo mkdir -p /var/www/example.com/public_html
  2. ตั้งสิทธิให้ apache เข้าไปวิ่งเล่นเขียนอ่านได้
    sudo chown -R $USER:$USER /var/www/example.com/public_html
    sudo chmod -R 755 /var/www
  3. สร้างไฟล์ configuration แยกออกมาจากตัวเดิม
    sudo nano /etc/apache2/sites-available/example.com.conf
  4. พิมพ์ตามตัวอย่าง
<VirtualHost *:80>
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    DocumentRoot /var/www/example.com/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    ServerAdmin [email protected]
    ServerAlias www.example.com
    ServerName example.com
    <Directory "/var/www/example.com/public_html">
        Allow from all
        AllowOverride All
        Options FollowSymLinks
        Order Allow,Deny
    </Directory>
</VirtualHost>
  1. เปิดใช้งาน configuration
    sudo a2ensite example.com.conf
  2. รีสตาร์ apache
    sudo systemctl restart apache2

ทดลองใส่ไฟล์เข้าไปใน /var/www/example.com/public_html แล้วเรียก url ที่ใส่เพิ่มเข้าไปดูว่าสามารถเรียกได้รึเปล่า

IIS: การเตรียม site (พื้นที่) สำหรับเว็บ

บางครั้งก็ต้องเซ็ตให้ server เดียวกันมี domain หลายตัว หรือสร้างเว็บที่มีหลาย port ตัว iis ก็ทำได้เหมือน apache เช่นกัน

  1. สร้าง folder ขึ้นมาใหม่ใน C:\inetpub\wwwroot เช่น C:\inetpub\wwwroot\documentRoot หรือไว้ที่อื่นก็ได้
  2. เซ็ต folder permission ให้ user ที่เหมาะสมสามารถเขียนและแก้ไขไฟล์ได้
  3. เปิดโปรแกรม Internet Information Services (IIS) Manager
  4. คลิกขวาที่ Sites เลือก add website
    Site name
    ให้ใส่ชื่อเว็บไซต์ เช่น panpan UAT
    Application pool:
    เลือก envalument ที่สามารถ run php ได้เช่น PHP 7.3 UAT หรือ DefaultAppPool
    Physical path
    ให้ใส่ path folder ที่สร้างในขั้นตอนที่ 1 หรือชี้ไป folder public เช่น C:\www\panpan_v1_UAT\public
    IP address
    ถ้าไม่ระบุใช้ใช้ ALL Unassigned
    Port
    เลขตั้งแต่ 0 – 65536 ที่นิยมคือ 80 และ 8080
  5. คลิก OK
  6. ใน message box คลิก yes

สร้าง muti site ใน laravel

ต้องการสร้างเว็บรองรับหลายๆ บริษัท โดยที่ใช้ code ชุดเดียวกันและให้ฝ่ายที่ดูแลสามารถเพิ่มข้อมูลและเว็บไซต์ ได้เองโดยที่ไม่ต้องใช้ความรู้ทางด้านการเขียนโปรแกรมเลย

เจอ package ชื่อ delatbabel/site-config แต่เพราะว่าเค้ารองรับแค่ laravel 5.1 เลยต้องสร้าง project ใหม่ตั้งแต่ต้นเลย

  1. พิมพ์ command
    composer create-project laravel/laravel sites "5.1.*"
  2. แก้ config ในไฟล์ .env ให้ติดต่อ databse ได้
    ...
        DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_DATABASE=sites
        DB_USERNAME=root
        DB_PASSWORD=xxx
    ...
  3. เพิ่ม package ในไฟล์ composer.json
    ...
        "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
    ...
        "delatbabel/site-config": "~1.0"
        },
    ...
  4. run command
        composer update
        
  5. เปิดไฟล์ config\app.php เพิ่ม
    ...
        'providers' => [
    ...
        Delatbabel\SiteConfig\SiteConfigServiceProvider::class,
    ...
        ],
    ...
        'aliases' => [
    
        'SiteConfigSaver'   => Delatbabel\SiteConfig\Facades\SiteConfigSaver::class,
    
        ],
    ...
  6. เพิ่ม Boostrap the Config Loader ใน 2 ไฟล์ คือ \app\Console\Kernel.php และ \app\Http\Kernel.php ต้องครบ 2 ไฟล์นะครับ ผมใส่ไม่ครบงงอยู่นานมากทำไม่มันมันใช้ไม่ได้
    ...
        protected function bootstrappers()
        {
            $bootstrappers = parent::bootstrappers();
    
            // Add the SiteConfig bootstrapper to the end.
            $bootstrappers[] = 'Delatbabel\SiteConfig\Bootstrap\LoadConfiguration';
    
            return $bootstrappers;
        }
    ...
  7. Incorporate and Run the Migrations โดย run command
        php artisan vendor:publish --tag=migrations --force
        php artisan migrate

การติดตั้งเสร็จแล้ว ที่นี้จะทดลองใช้งาน

  1. สร้างไฟล์ \app\Http\Controllers\HomeController.php
      <?php
    
    namespace App\Http\Controllers;
    
    use App\User;
    use App\Http\Controllers\Controller;
    
    class HomeController extends Controller {
    
        /**
         * Show the profile for the given user.
         */
        public function index()
        {
    
            return 'title = '.config('config.title');
    
            $config = config()->all();
    
            return '<pre>'. print_r($config ,true).'</pre>';
        }
    
    }
    
  2. เพิ่ม route ในไฟล์ \app\Http\routes.php
    ...
    Route::get('/', 'HomeController@index');
    ...
    
  3. ทดลอง set domain ขึ้นมาเทส เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
    ...
    127.0.0.1	phunsanit.com
    127.0.0.1	pitt.com
    ...
    
  4. เพิ่มข้อมูลทกสอบโดยใช้
    INSERT INTO `configs` (`id`, `website_id`, `environment`, `group`, `key`, `value`, `type`, `created_at`, `updated_at`) VALUES
    (1, 1, NULL, 'config', 'title', 'localhost', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (2, 1, 'prod', 'config', 'title', 'localhost ON production', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (3, 1, 'test', 'config', 'title', 'localhost IN TEST SERVER', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (4, 2, NULL, 'config', 'title', 'pitt.com', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (5, 2, 'prod', 'config', 'title', 'pitt.com ON production', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00'),
    (6, 2, 'test', 'config', 'title', 'pitt.com IN TEST SERVER', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00');
    
    INSERT INTO `websites` (`id`, `name`, `http_host`, `environment`, `created_by`, `updated_by`, `created_at`, `updated_at`, `deleted_at`) VALUES
    (1, 'prototype', 'localhost', 'test', NULL, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL),
    (2, 'prototype', 'pitt.com', 'test', NULL, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', NULL);
    
  5. ทดสอบโดยเปิด http://localhost/mcms/public/ และ http://pitt.com/mcms/public/

นำไปดัดแปลงให้เหมาะกับงานที่ทำครับ