Triển khai Django trên Docker

 Python Web  Chức năng bình luận bị tắt ở Triển khai Django trên Docker
Th2 242019
 

Docker là một dự án mã nguồn mở giúp tự động triển khai các ứng dụng Linux và Windows vào trong các container ảo hóa. Docker cung cấp một lớp trừu tượng và tự động ảo hóa dựa trên Linux.

Cài đặt Docker

$ sudo apt-get update

Cài đặt Docker sử dụng câu lệnh

$ sudo apt-get install docker

Kiểm tra hoạt động của Docker

$ sudo docker run hello-world

Tạo ứng dụng chạy Django

Bước đầu tiên ta sẽ cài đặt Django và tạo một dự án mặc định

$ sudo pip install django==1.9
$ django-admin startproject djangoapp

Requirements File

Chúng ta sẽ tạo một file chứa các gói cần cài đặt

$ cd djangoapp
$ nano requirements.txt

Thêm các gói cần thiết

#requirements.txt

Django==1.9
gunicorn==19.6.0

Tạo Docker file

# set the base image 
FROM python:2.7

# File Author / Maintainer
MAINTAINER Esther

#add project files to the usr/src/app folder
ADD . /usr/src/app

#set directoty where CMD will execute 
WORKDIR /usr/src/app

COPY requirements.txt ./

# Get pip to download and install requirements:
RUN pip install --no-cache-dir -r requirements.txt

# Expose ports
EXPOSE 8000

# default command to execute    
CMD exec gunicorn djangoapp.wsgi:application --bind 0.0.0.0:8000 --workers 3 

Build the Docker Image

Để build image ta sẽ làm các bước sau:

$ sudo docker build -t django_application_image .

Sending build context to Docker daemon   12.8kB
Step 1/7 : FROM python:2.7
 ---> 2863c80c418c
Step 2/7 : ADD . /usr/src/app
 ---> 09b03ff8466e
Step 3/7 : WORKDIR /usr/src/app
Removing intermediate container a71a3bf6af90
 ---> 3186c92adc85
Step 4/7 : COPY requirements.txt ./
 ---> 701c0be5e039
Step 5/7 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Running in ed034f98db74
Collecting Django==1.9 (from -r requirements.txt (line 1))
  Downloading Django-1.9-py2.py3-none-any.whl (6.6MB)
Collecting gunicorn==19.6.0 (from -r requirements.txt (line 2))
  Downloading gunicorn-19.6.0-py2.py3-none-any.whl (114kB)
Installing collected packages: Django, gunicorn
Successfully installed Django-1.9 gunicorn-19.6.0
Removing intermediate container ed034f98db74
 ---> 1ffd08204a07
Step 6/7 : EXPOSE 8000
 ---> Running in 987b48e1a4ef
Removing intermediate container 987b48e1a4ef
 ---> ef889d6e8fcb
Step 7/7 : CMD exec gunicorn djangoapp.wsgi:application --bind 0.0.0.0:8000 --workers 3
 ---> Running in 4d929e361d0f
Removing intermediate container 4d929e361d0f
 ---> c6baca437c64
Successfully built c6baca437c64
Successfully tagged django_application_image:latest

Kiểm tra lại xem đã có images chúng ta vừa tạo không

$ sudo docker images.

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
django_application_image   latest              c6baca437c64        34 minutes ago      702MB

Chạy ứng dụng thông qua việc khởi động docker image

$ sudo docker run -p 8000:8000 -i -t django_application_image

[2018-03-25 12:29:08 +0000] [1] [INFO] Starting gunicorn 19.6.0
[2018-03-25 12:29:08 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000
[2018-03-25 12:29:08 +0000] [1] [INFO] Using worker: sync
[2018-03-25 12:29:08 +0000] [8] [INFO] Booting worker with pid: 8
[2018-03-25 12:29:08 +0000] [9] [INFO] Booting worker with pid: 9
[2018-03-25 12:29:08 +0000] [10] [INFO] Booting worker with pid: 10

Gunicorn sẽ khởi động ứng dụng và chạy ở đường link http://0.0.0.0:8000. Sau đó bạn có thể truy cập nó từ trình duyệt.

Để kiểm tra các container hoạt động, bạn dùng lệnh:

$ sudo docker ps -a
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                           PORTS                            NAMES
100695b41a0a        django_application_image   "/bin/sh -c 'exec gu…"   13 seconds ago      Exited (0) 4 seconds ago                                          hopeful_easley

Tổng kết

Việc chạy ứng dụng trên Docker sẽ giúp chúng ta khởi động ứng dụng một cách nhanh chóng, môi trường giữa các ứng dụng khác nhau cũng dễ dàng được phân biệt và quản lý.

Chúc các bạn thành công!

Backup Mysql và gửi file backup qua email

 Python System  Chức năng bình luận bị tắt ở Backup Mysql và gửi file backup qua email
Th2 232019
 
  • Bài toán: Hàng ngày sysadmin cần phải theo dõi và backup database của các dịch vụ công ty, việc backup diễn ra thủ công bằng tay gây mất nhiều thời gian và công sức.
  • Ý tưởng giải quyết: Viết một chương trình tự động sao lưu database mysql sau đó tự động gửi về email cho quản trị viên. Sau đây là chương trình gợi ý.
#!/usr/bin/python3
 
import MySQLdb
import os
import time
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
 
user='xyz'
passwd='abc'
host='localhost'
 
#! Mail authentication for sending attachment to administrator
gmail_user = "oh123star@star.com"
gmail_pwd = "sdasdasdas"
filestamp = time.strftime('%Y-%m-%d')
conn = MySQLdb.connect (host, user, passwd)
 
cursor = conn.cursor()
 
cursor.execute("SHOW DATABASES")
 
results = cursor.fetchall()
cursor.close()
conn.close()
 
for result in results:
    if result[0] == 'MAP':
            backupfile=result[0]+ "_"+ filestamp + ".sql.gz"
            cmd="echo 'Back up "+result[0]+" database to /Backup/"+backupfile+"'"
            os.system(cmd)
            cmd="mysqldump -u "+user+" -h "+host+" -p"+passwd+"  "+result[0]+" | gzip -9 --rsyncable > /Backup/"+backupfile
            os.system(cmd)
 
#! Send email method
 
def mail(to, subject, text, attach):
  msg = MIMEMultipart()
 
  msg['From'] = gmail_user
  msg['To'] = to
  msg['Subject'] = subject
 
  msg.attach(MIMEText(text))
 
  part = MIMEBase('application', 'octet-stream')
  part.set_payload(open(attach, 'rb').read())
  Encoders.encode_base64(part)
  part.add_header('Content-Disposition',
          'attachment; filename="%s"' % os.path.basename(attach))
  msg.attach(part)
 
  mailServer = smtplib.SMTP("mail.abc.com", 25)
  mailServer.ehlo()
  mailServer.starttls()
  mailServer.ehlo()
  mailServer.login(gmail_user, gmail_pwd)
  mailServer.sendmail(gmail_user, to, msg.as_string())
  # Should be mailServer.quit(), but that crashes...
  mailServer.close()
 
title = filestamp + " Backup File HAN MAP database!"
mail("destinationEmail@abc.com",
  title,
  "Hello. Please refer to attachment about database backup",
  backupfile)

Chúc bạn thành công.

JAVIS ENTERPRISE TUYỂN DỤNG

 Tuyển dụng  Chức năng bình luận bị tắt ở JAVIS ENTERPRISE TUYỂN DỤNG
Th2 222019
 

[HN] CÔNG TY TNHH JAVIS ENTERPRISE TUYỂN DỤNG

– 02 KỸ SƯ PYTHON XỬ LÝ HÌNH ẢNH (~$1800)
>> Chấp nhận Fresher tư duy tốt và ham học hỏi

️ GIỚI THIỆU CHUNG:
– Javis là công ty 100% vốn Nhật Bản, cung cấp dịch vụ phần mềm, kỹ thuật ứng dụng, dịch vụ…cho các công ty Nhật Bản trong và ngoài nước. CEO là người Nhật, đồng thời là dev. 
– Chúng tôi đảm nhiệm các dự án về Rails, php, Python, Ios, Android, Unity…Chúng tôi đã và đang nghiên cứu các dự án khoa học và máy tính.

✳

️ TUYỂN DỤNG CHO VỊ TRÍ SAU:
– Kỹ sư Python về lĩnh vực xử lý hình ảnh.

✳

️ PHÚC LỢI
– Lương: ~ $1800
– Có thể thỏa thuận lương theo từng dự án, có thưởng sau mỗi dự án tốt, mức lương cạnh tranh, xứng đáng với khả năng và kinh nghiệm.
– Được nghỉ thứ 7, cn và các ngày lễ theo quy định.
– Môi trường làm việc lịch sự, hiện đại, sáng tạo, trẻ trung.
– Làm việc, học hỏi và phát triển cũng đồng nghiệp là những kỹ sư trẻ tài năng, đam mê và có lý tưởng lớn.

✳

️ YÊU CẦU CÔNG VIỆC
– Bằng cử nhân hoặc tương đương về khoa học máy tính hoặc lĩnh vực liên quan.
– Có kinh nghiệm với việc sử dụng git, linux, docker, pytorch và tensorflow.
– Đọc và hiểu tiếng Anh đủ dùng, có thể Report và đặt câu hỏi cho kỹ sư người Nhật. 
– Đối với vị trí dự án xử lý hình ảnh: Có kinh nghiệm về sử dụng python trong lĩnh vực phân tích hình ảnh.

?

NOTE: Chấp nhận Fresher

➡️ CV gửi về địa chỉ:
– Email: mshangnguyen@javis.vn theo tiêu đề [vị trí ứng tuyển]-[họ và tên]
➡️ Mọi người quan tâm chi tiết về từng công việc vui lòng inb trực tiếp mình hoặc liên hệ:
– Số điện thoại: 033.585.2069
Rất mong rất mong sớm được nhận CV của các bạn !

Gisoft tuyển dụng

 Tuyển dụng  Chức năng bình luận bị tắt ở Gisoft tuyển dụng
Th2 222019
 

Yêu cầu:
– Hiểu và có khả năng phát triển ứng dụng dựa trên Python, Java-script, và các mã nguồn mở
– Có khả năng tự nghiên cứu, đọc hiểu tốt bằng tiếng Anh
– Chịu được áp lực và hoàn thành công việc đúng hạn
– Có hiểu biết tốt về cú pháp Python, đọc code Python.
– Lập trình hướng đối tượng (Object oriented programming).
– Có kinh nghiệm làm việc với MySQL, Redis, MongoDB
– Làm việc được với Git.
*Chế độ
– Được làm việc cùng các chuyên gia dày dặn kinh nghiệm.
– Công ty có tuổi đời rất trẻ nên khả năng học hỏi là rất cao và đầy thử thách.
– Tham gia khóa học tiếng nhật tại công ty
– Có cơ hội đi làm việc tại nước ngoài như Nhật bản, Singapore,…
– Có trợ cấp ăn trưa, xăng xe đi lại ngay cả các bạn là thực tập. Hỗ trợ siêu máy tính cần thiết cho công việc
– Được đóng BHXH, BHTN, BHYT theo quy định của nhà nước
– Xét tăng lương 2 lần 1 năm, Thưởng theo dự án.
– Thưởng tháng 13 đầy đủ
– Được tham gia dã ngoại, du lịch tham quan theo quy định của công ty kể cả là nhân viên thử việc, thực tập.
– Được nghỉ lễ tết theo quy định của nhà nước và công ty
– Tuần làm việc ngày 8 tiếng từ thứ 2 đến thứ 6(Thứ 7, chủ nhật được nghỉ) số lượng: 2 ngườiNgười liên hệ: Ms Vân, Mail: tuyendung@gisoft.vnHạn tuyển dụng 30/3/2019

Mắt Bão tuyển dụng Lập trình viên Odoo (OpenERP)

 Tuyển dụng  Chức năng bình luận bị tắt ở Mắt Bão tuyển dụng Lập trình viên Odoo (OpenERP)
Th2 192019
 

Mô tả Công việc

Số lượng cần tuyển: 01

·         Tiếp nhận các yêu cầu về Odoo (OpenERP), phân tích và xây dựng giải pháp, xây dựng chức năng theo yêu cầu của công ty.

·         Hỗ trợ end-users trong quá trình vận hành hệ thống: Hướng dẫn, đào tạo, xử lý các tình huống phát sinh.

·         Cấu hình, chức năng của Odoo (OpenERP) đào tạo hướng dẫn lại trong nội bộ.

Yêu Cầu Công Việc

·         Có hiểu biết căn bản về Linux.

·         Thành thạo ngôn ngữ Python

·         Có hiểu biết về PostgreSQL

·         Có hiểu biết sâu sắc về CSS, XML

Ưu tiên

·         Có kinh nghiệm về Odoo version 10 trở lên.

·         Có kiến thức về sự vận hành và hoạt động của một số module cơ bản như Sales, Inventory,Project, …

·         Có thể làm báo cáo RML và QWEB.

Quyền lợi được hưởng

·         Mức lương: 12.000.000-18.000.000đ

·         Xét tăng lương hàng năm

·         Môi trường làm việc năng động, chuyên nghiệp, có tính thử thách cao, khả năng sáng tạo tối đa, cơ hội phát huy và thể hiện khả năng của mình.

·         Chế độ đãi ngộ đầy đủ theo chính sách công ty và luật lao động.

·         Cơ hội làm việc với các quản lý nhiều kinh nghiệm, tích lũy kinh nghiệm và mở rộng mối quan hệ, nâng cao sự hiểu biết về CNTT, và mang tới cho bạn thành công và hoài bão.

·         Cơ hội thăng tiến cao: Các vị trị quản lý cao cấp.

Địa điểm làm việc: Lô M1-05 Chung cư Carillon, 171A Hoàng Hoa Thám, Phường 13, Quận Tân Bình, TP.HCM

CV xin gửi về: tuyendung@matbao.com

Hạn chót nộp hồ sơ: 31/03/2018

Entrust Tuyển dụng

 Tuyển dụng  Chức năng bình luận bị tắt ở Entrust Tuyển dụng
Th2 192019
 

Công ty TNHH Tư vấn EntrustTuyển Lập trình Dev/Python/Odoo ĐI LÀM LUÔN

Số lượng: 5
Yêu cầu:
– Dựa trên nền tảng Odoo phát triển các công cụ quản trị cho doanh nghiệp như: Quản lý kho, quản lý sản xuất, quản lý nhân sự, quản lý dự án, quản lý khách hàng (CRM), thương mại điện tử,…
– Tích hợp với các hệ thống phụ trợ (Call Center, đơn vị vận chuyển, ngân hàng, SMS, Email…)
– Nghiên cứu và triển khai các giải pháp giúp tối ưu hệ thống và trải nghiệm người dùng

Quyền lợi:
– Lương cạnh tranh, hấp dẫn, thỏa thuận theo năng lực.
– Đóng BHXH, BHYT, BHTN theo quy định.
– Thưởng lương tháng thứ 13 và lễ Tết.
– Hỗ trợ cơm trưa và đồ ăn uống tại văn phòng
Liên hệ: Thông tin CV gửi về: lanluong@entrustlab.com SDT 0989367968
Địa chỉ: Tòa 25T1 Hoàng Đạo Thúy, Cầu Giấy, HN

DCT SOLUTIONS Tuyển dụng

 Tuyển dụng  Chức năng bình luận bị tắt ở DCT SOLUTIONS Tuyển dụng
Th2 182019
 

– Vị trí: Fresher/Part-Time/Intern
      + Nội dung tuyển dụng: Phát triển hệ thống ERP với Odoo. Thông tin như file đính kèm (Fresher Python)
      + Số lượng tuyển dụng: 10.
– Vị trí: Junior/Senior
      + Nội dung tuyển dụng: Phát triển hệ thống ERP với Odoo. 01-03 năm kinh nghiệm. Thông tin như file đính kèm (Junior Python)
      + Số lượng tuyển dụng: 02.
– Người liên hệ: hoang.tran@dctsolution.vn, hoặc hr@dctsolutions.io
– Hạn cuối nhận hồ sơ: 18/03/2019, hoặc khi đã đủ số lượng.

Tidy.vn tuyển dụng

 Tuyển dụng  Chức năng bình luận bị tắt ở Tidy.vn tuyển dụng
Th2 162019
 

www.tidy.vn đang cần tuyển Django backend developer tại Hà Nội.
=> Lương từ 20-30tr.
=> Cần tối thiểu 1 năm kinh nghiệm.

=> Thưởng tết ít nhất 1 tháng lương và thưởng thêm theo doanh thu của công ty (không giới hạn).
Email: info@tidy.vn

Bài 5: Cấu trúc điều khiển If else

 Python Basic  Chức năng bình luận bị tắt ở Bài 5: Cấu trúc điều khiển If else
Th2 132019
 

Cấu trúc câu lệnh điều khiển như sau:

If statement

The syntax looks like

if expression:
do this

Ví dụ: Viết chương trình kiểm tra số nhỏ (lớn) hơn 100 Code tham khảo

#!/usr/bin/env python
number = int(raw_input("Enter a number: "))
if number < 100:
print "The number is less than 100"

Kết quả:

$ ./number100.py
Enter a number: 12
The number is less than 100

Else

Trong trường hợp muốn in ra số đó lớn hơn 100, trường hợp này chúng ta sử dụng else. Nó sẽ thực hiện khi biểu thức if không hoàn thành.

#!/usr/bin/env python
number = int(raw_input("Enter a number: "))
if number < 100:
print "The number is less than 100"
else:
print "The number is greater than 100"

Kết quả :

$ ./number100.py
Enter a number: 345
The number is greater than 100

Ví dụ về cách sử dụng elif

>>> x = int(raw_input("Please enter an integer: "))
>>> if x < 0:
... x = 0
... print 'Negative changed to zero'
... elif x == 0:
... print 'Zero'
... elif x == 1:
... print 'Single'
... else:
... print 'More'

Chúc các bạn thành công !

Bài 4: Toán tử và biểu thức

 Python Basic  Chức năng bình luận bị tắt ở Bài 4: Toán tử và biểu thức
Th2 122019
 

Trong Python bạn có thể thực hiện phép tính từ trên trình thông dịch.

Ví dụ:

>>> 2 + 3
5
>>> 23 - 3
20
>>> 22.0 / 12
1.8333333333333333

Để lấy giá trị thập phân bạn thực hiện như trên. Để lấy giá trị làm trong bạn sử dụng toán tử %

>>> 14 % 
32

Ví dụ về số nguyên

 
#!/usr/bin/env python
days = int(raw_input("Enter days: "))
months = days / 30
days = days % 30
print "Months = %d Days = %d" % (months, days)

Kết quả như sau:

$ ./integer.py
Enter days: 265
Months = 8 Days = 25

Trong dòng đầu tiên chúng ta sẽ lấy số ngày, sau đó lấy số tháng và ngày và cuối cùng là in chúng ra màn hình. Bạn có thể làm chúng một cách dễ dàng.

#!/usr/bin/env python
days = int(raw_input("Enter days: "))
print "Months = %d Days = %d" % (divmod(days, 30))

Hàm divmod(num1, num2) trả về hai giá trị , giá trị thứ 2 là division của num1 và num2 và giá trị thứ 2 là modulo của num1 và num2.

Toán tử quan hệ (Relational Operators)

Bạn cũng có thể sử dụng toán tử quan hệ trong Python như ví dụ dưới đây.

 
>>> 1 < 2
True
>>> 3 > 34
False
>>> 23 == 45
False
>>> 34 != 323
True
>>> 4.0 // 3
1.0
>>> 4.0 / 3
1.3333333333333333

Toán tử logic (Logical Operators)

Ví dụ:

>>> 1 and 4
4
>>> 1 or 4
1
>>> -1 or 4
-1
>>> 0 or 4
4

Tính toán

>>> a = 12
>>> a += 13
>>> a
25
>>> a /= 3
>>> a
8
>>> a += (26 * 32)
>>> a
840
#!/usr/bin/env python
N = 100
a = 2
while a < N:
print "%d" % a
a *= a

Kết quả:

$ ./shorthand.py
2
4
16

Biểu thức

Bạn có thể sử dụng như ví dụ dưới đây, để dễ đọc bạn nên có dấu cách.

 a = 234 * (45 - 56.0 / 34) 

Ví dụ:

#!/usr/bin/env python
a = 9
b = 12
c = 3
x = a - b / 3 + c * 2 - 1
y = a - b / (3 + c) * (2 - 1)
z = a - (b / (3 + c) * 2) - 1
print "X = ", x
print "Y = ", y
print "Z = ", z

Kết quả

$ ./evaluationexp.py
X = 10
Y = 7
Z = 4

Chuyển đổi kiểu

Chúng ta có thể thưc hiện chuyển đổi thủ công. Ví dụ như:

float(string) -> float value
int(string) -> integer value
str(integer) or str(float) -> string representation
>>> a = 8.126768
>>> str(a)
'8.126768'

Sau đây là chương trình tính toán giá trị của dãy số 1/x+1/(x+1)+1/(x+2)+ … +1/n với n tăng dần, trong trường hợp x = 1 và n =10

#!/usr/bin/env python
sum = 0.0
for i in range(1, 11):
sum += 1.0 / i
print "%2d %6.4f" % (i , sum)

Kết quả như sau:

$ ./evaluateequ.py
1 1.0000
2 1.5000
3 1.8333
4 2.0833
5 2.2833
6 2.4500
7 2.5929
8 2.7179
9 2.8290
10 2.9290

Dòng code sum += 1.0 / i nó có nghĩa là sum = sum + 1.0 / i.

Sau đây là chương trình giải phương trình bậc 2

#!/usr/bin/env python
import math
a = int(raw_input("Enter value of a: "))
b = int(raw_input("Enter value of b: "))
c = int(raw_input("Enter value of c: "))
d = b * b - 4 * a * c
if d < 0:
print "ROOTS are imaginary"
else:
root1 = (-b + math.sqrt(d)) / (2.0 * a)
root2 = (-b - math.sqrt(d)) / (2.0 * a)
print "Root 1 = ", root1
print "Root 2 = ", root2

Trong ví dụ này chúng ta sẽ thực hiện tính toán lương của một nhân viên kinh doanh camera. Lương cơ bản là 1500, với mỗi một camera bán được anh ấy sẽ có 200 và hoa hồng của nhân viên kinh doanh là 2%. Đầu vào là số camera và tổng số giá của camera.

#!/usr/bin/env python
basic_salary = 1500
bonus_rate = 200
commision_rate = 0.02
numberofcamera = int(raw_input("Enter the number of inputs sold: "))
price = float(raw_input("Enter the total prices: "))
bonus = (bonus_rate * numberofcamera)
commision = (commision_rate * numberofcamera * price)
print "Bonus = %6.2f" % bonus
print "Commision = %6.2f" % commision
print "Gross salary = %6.2f" % (basic_salary + bonus + commision)

Kết quả như sau:

$ ./salesmansalary.py
Enter the number of inputs sold: 5
Enter the total prices: 20450
Bonus = 1000.00
Commision = 2045.00
Gross salary = 4545.00

Chúc các bạn thành công !